博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)
阅读量:7126 次
发布时间:2019-06-28

本文共 3356 字,大约阅读时间需要 11 分钟。

JSONP(JSON with Padding)可以看成是JSON的一种“使用模式”,用以解决“跨域访问”的问题,这篇简单的文章给出一个简单的例子用于模拟如何通过jQuery以JSONP的访问调用一个WCF REST服务。[源代码从下载]

在这个例子中,我们将定义一个用于返回所有员工信息的服务,下面是用于表示员工信息的Employee的类型和契约接口。契约接口IEmployees的GetAll操作用以返回所有员工列表,我们指定了Uri模板并将回复消息格式设置为JSON。

1: using System.Collections.Generic;
2: using System.ServiceModel;
3: using System.ServiceModel.Web;
4: namespace Artech.WcfServices.Service.Interface
5: {
6:     [ServiceContract]
7:     public interface IEmployees
8:     {
9:         [WebGet(UriTemplate = "all",ResponseFormat =WebMessageFormat.Json)]
10:         IEnumerable
GetAll();
11:     }
12:     public class Employee
13:     {
14:         public string Id { get; set; }
15:         public string Name { get; set; }
16:         public string Department { get; set; }
17:         public string Grade { get; set; }
18:     }
19: }

在如下所示的服务类型EmployeesService 中,我们直接让服务操作GetAll返回一个包含3个Employee对象的列表。

1: using System.Collections.Generic;
2: using Artech.WcfServices.Service.Interface;
3: namespace Artech.WcfServices.Service
4: {
5:     public class EmployeesService : IEmployees
6:     {
7:         public IEnumerable
GetAll()
8:         {
9:             return new List
10:             {
11:                 new Employee{ Id = "001", Name="张三", Department="开发部", Grade = "G6"},
12:                 new Employee{ Id = "002", Name="李四", Department="人事部", Grade = "G7"},
13:                 new Employee{ Id = "003", Name="王五", Department="销售部", Grade = "G8"}
14:             };
15:         }
16:     }
17: }

我们通过控制台程序对服务进行寄宿。从下面的配置可以看到我们采用了标准终结点WebHttpEndpoint。为了让服务具有跨域支持的能力,我们必须将标准终结点的crossDomainScriptAccessEnabled属性设置为True。WebHttpBinding也具有同名的属性,如果直接使用WebHttpBinding也需要将该属性设置为True。

1: 
2:   
3:     
4:       
5:         
6:       
7:     
8:     
9:       
10:         
11:       
12:     
13:     
14:       
15:         
16:                   address="http://127.0.0.1:3721/employees"
17:                   contract="Artech.WcfServices.Service.Interface.IEmployees"/>
18:       
19:     
20:   
21: 

在客户端,我们在一个Web页面中通过jQuery进行Ajax调用这个服务,并将得到的员工列表显示在一个表格中。出CSS之外的页面代码如下所示,需要注意的是在进行Ajax调用的使用将dataType选项设置成“jsonp”,而不是“json”。

1: 
2: 
3:   
4:     员工列表
5:     
6:        ...
7:     
8:     
9:     
10:         $(function () {
11:             $.ajax({
12:                 type: "get",
13:                 url: "http://127.0.0.1:3721/employees/all",
14:                 dataType: "jsonp",
15:                 success: function (employees) {
16:                     $.each(employees, function (index, value) {
17:                         var detailUrl = "detail.html?id=" + value.Id;
18:                         var html = "";
19:                         html += value.Id + "";
20:                         html += "" + value.Name + "";
21:                         html += value.Grade + "";
22:                         html += value.Department + "";
23:                         $("#employees").append(html);
24:                     });
25:                     $("#employees tr:odd").addClass("oddRow");
26:                 }
27:             });
28:         });
29:      
30:   
31:   
32:     
33:         
34:             ID
35:             姓名
36:             级别
37:             部门
38:         
39:     
40: 
41: 

当服务启动后在浏览器中显示上面这个Web页面,会得到如下所示的员工列表。

转载地址:http://mvael.baihongyu.com/

你可能感兴趣的文章
【进阶】深入redis,然后正确使用它
查看>>
Akka系列(三):监管与容错
查看>>
Lagom参考指南(三)
查看>>
Laravel 5.4 入门系列 1. 安装
查看>>
JVM 内存模型
查看>>
微信公众号编辑助手
查看>>
使用 telegram 收发微信消息
查看>>
基于 Node.js 和 Vue 的高效、简单功能强大的静态博客生成器。
查看>>
「Java 8 函数式编程」读书笔记——高级集合类和收集器
查看>>
理解 TCP(三):连接的建立和释放
查看>>
Kotlin生态调查结果出炉:超过6成的开发者用过Kotlin了
查看>>
Java 虚拟机经典六问
查看>>
AWS太过强势?VMware为自保疑与微软达成合作
查看>>
docker 网络工具 pipework 分析
查看>>
「镁客早报」苹果下调第一财季营收展望;Model 3第四季度交货量不及预期 ...
查看>>
大数据创业公司Kyligence获2500万美元C轮融资,Coatue Management 领投 ...
查看>>
超级速度抓取器!Blackmore 的多普勒激光雷达是屠龙刀吗?
查看>>
pdb内存管理
查看>>
Linux基金会成立 LF Edge 小组,支持边缘网络开发
查看>>
GoLand 2019.1 发布 RC 候选版
查看>>